package 简单.模拟;

/**
 * 如果一个密码满足以下所有条件，我们称它是一个 强 密码：
 * 它有至少 8 个字符。
 * 至少包含 一个小写英文 字母。
 * 至少包含 一个大写英文 字母。
 * 至少包含 一个数字 。
 * 至少包含 一个特殊字符 。特殊字符为："!@#$%^&*()-+" 中的一个。
 * 它 不 包含 2 个连续相同的字符（比方说 "aab" 不符合该条件，但是 "aba" 符合该条件）。
 * 给你一个字符串 password ，如果它是一个 强 密码，返回 true，否则返回 false 。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode.cn/problems/strong-password-checker-ii
 */
public class 强密码检验器II_2299 {

    public static void main(String[] args) {

    }

    public boolean strongPasswordCheckerII(String password) {
        if (password.length() < 8) {
            return false;
        }

        boolean hasBig = false, hasSmall = false, hasNum = false, hasSpecial = false;

        for (int i = 0; i < password.length(); i++) {
            if (i > 0 && password.charAt(i) == password.charAt(i - 1)) {
                return false;
            }

            if (Character.isDigit(password.charAt(i))) {
                hasNum = true;
            } else if (Character.isUpperCase(password.charAt(i))) {
                hasBig = true;
            } else if (Character.isLowerCase(password.charAt(i))) {
                hasSmall = true;
            } else {
                hasSpecial = true;
            }
        }
        return hasBig && hasSmall && hasNum && hasSpecial;
    }

}
